package itheima01;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
    BufferedInputStream类   高效字节输入缓冲流       读取字节的       读进来
	作用： 内部定义了一个长度为8192的字节数组，可以提高效率

	常用方法:
		1.public void close(): 关闭流,释放资源
		2.public int read(): 读取一个字节
			遇到文件结束标志,返回-1,说明读取文件应该结束了

		3.public int read(byte[] bs):
			读取一些字节,把读取到的多个字节的内容,存储到方法参数字节数组bs中
			返回读取到的字节的数量

	构造方法：
		public BufferedInputStream(InputStream is):
			参数： InputStream is 字节输入流抽象类 传递子类FileInputStream对象

	使用步骤：
		1.创建InputStream类的子类FileInputStream对象，绑定源文件
		2.创建高效字节输入流BufferedInputStream对象bis,传递InputStream类的子类FileInputStream对象
		3.高效字节输入流BufferedInputStream对象bis调用read方法,读取字节
		4.关闭流

	注意:
		1.对于缓冲流,千万不要自己调用flush方法
		2.只需要关闭缓冲流,自动关闭缓冲流所关联的其它流对象
 */
public class Demo02BufferedInputStream {
    public static void main(String[] args) throws IOException {
        method02();
    }
    //字节数组循环读取
    private static void method02() throws IOException {
        //1.创建InputStream类的子类FileInputStream对象，绑定源文件
        //2.创建高效字节输入流BufferedInputStream对象bis,传递InputStream类的子类FileInputStream对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("day12\\bos.txt"));


        //3.高效字节输入流BufferedInputStream对象bis调用read方法,读取字节
        //字节数组循环读取
        int len = 0;
        byte[] bs = new byte[1024];

        while((len = bis.read(bs))!=-1) {
            System.out.print(new String(bs,0,len));
        }

        //4.关闭流
        bis.close();
    }

    //单字节循环读取
    private static void method01() throws IOException {
        //1.创建InputStream类的子类FileInputStream对象，绑定源文件
        FileInputStream fis = new FileInputStream("day12\\bos.txt");

        //2.创建高效字节输入流BufferedInputStream对象bis,传递InputStream类的子类FileInputStream对象
        BufferedInputStream bis = new BufferedInputStream(fis);

        //3.高效字节输入流BufferedInputStream对象bis调用read方法,读取字节

        int b = 0;
        while((b = bis.read())!=-1) {
            System.out.print((char)b);
        }

        //4.关闭流
        bis.close();
    }
}
